Repository navigation
ACE benchmarks on Paanini and figures - #20
Merged
Merged
Conversation
The shared Liouvillian propagator uses unprimed = output and primed = input,
but bath MPO wiring still mapped those legs backwards. Evolution then used
the time-reversed channel, which loose PT-vs-full-ED tolerances hid as
Trotter error.
Wire prime(env) to the left bond and env to the right, and compare PT
snapshots to the same discrete U(Δt) at ~1e-11. Keep e^{-itH} only as a
separate Trotter check.
Wrap the suite in NullLogger after the progress tests, and assert expected warnings with @test_logs so Julia 1.12 does not look at stderr.
…ression ACE now offers `:zipup_cpp` (ACE C++ styled truncate-then-join with ITensors gesdd solver) or `:canonzip`. Examples, docs, tests, and ACE compressor figures are regenerated on that interfact.
Multimode Dense cores had bath input/output combiners swapped relative to the one-mode builder, so non-commuting batyhs were not TP. Align fused links and initial/trace attachments with the chronological convention, and cover Dense/ACE against matching split-ED schedules with random Hermitian baths for a rigorous correctness verification.
Record single-core zipup_cpp ProcessTensors.jl construction of various process tensors next to Cygorek's ACE on the same models and bathmode grids. Also contains files to check the sanity of both C++ and Julia PT constructors' evolution against ED results for a small bath made of spins and bosons. Refer to README.md files on each folder to know the details of the benchmark implementations and the folder contents.
Replace per-suite .bench_env/.plot_env activation with benchmark/Project.toml (and Manifest), plus a small env.jl instantiate helper that parallel workers can skip via SKIP_INSTANTIATE=1. Point all suite entrypoints and READMEs at julia --project=benchmark, ignore local *smoke*.csv artefacts, and escape LaTeX underscores in benchmark READMEs so GitHub does not treat subscripts as Markdown italics. Co-authored-by: Cursor <cursoragent@cursor.com>
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Production ACE construction timings and figures from the Paanini workstation, plus two correctness fixes found while checking those runs against exact references.
Benchmarks
All new suites live under
benchmark/and sharejulia --project=benchmark. CSVs and figures are committed; C++ ACE is a separate clone and is not in the repo. Construction is single-threaded (julia -t 1, one OpenMP/BLAS thread). Methodology is in the folder READMEs.Julia vs C++ (
benchmark/JuliaVsC++/).build_process_tensoragainst Cygorek C++ ACE withdont_propagate.:zipup_cpp.build_sis lower throughout: polarisedbenchmark/JuliaVsC++/results/julia_vs_cpp.pdf.Compressor comparison (
$N$ , an eight-spin cutoff sweep (trajectory error vs a canonzip $\varepsilon=10^{-13}$ reference), and BLAS-thread scaling of one easy polarised central spin and one hard spin-boson PT. Figure:
benchmark/ace_compressors/).:zipup_cppvs:canonzipat the same cutoff: unpolarised central-spin scaling inbenchrk/ace_compressors/results/ace_compression.pdf.SciPost Figure 1 ($S_z\otimes S_z$ bath. Direct 32-dimensional ED is the $\Delta t$ -free reference; $10^{-12}$ . Panels compare timestep and propagation order. Figure:
benchmark/scipost_fig1/). Four-modeDense()is the exact PT; ACE uses:canonzipatbenchmark/scipost_fig1/results/fig1.pdf.SciPost Figure 2 ($N=50$ , one archived $(\Delta t,\varepsilon)$ . Panel (a) is the bond profile $D_k(t)$ ; panel (b) is $D_{\max}$ over $\Delta t\in{1.5,0.5,0.2,0.1,0.05}$ and $\varepsilon\in{10^{-6},\ldots,10^{-12}}$ . Finer timesteps and tighter cutoffs raise $D_{\max}$ (for example $\Delta t=0.1$ , $\varepsilon=10^{-6}$ gives $D_{\max}=4$ ; $\varepsilon=10^{-12}$ gives 42). Figure:
benchmark/scipost_fig2/). Unpolarised central spin,Xoshiro(20260905)bath for everybenchmark/scipost_fig2/results/fig2.pdf.Deprecation of
:zipupThe previous default joined a mode ahead of truncation. That is not the C++ ACE schedule. The C++ forward pass truncates the current core before the next timestep is joined, then sweeps backward.
:zipupis removed.ACE(; compression)is now:zipup_cpp(default) or:canonzip.:zipup_cppis that truncate-then-join order with the ITensors default SVD (gesdd). Passing:zipupthrows and names:zipup_cpp. Compressor figures and examples were regenerated on this interface. This is a pre-1.0 keyword break; the package version stays0.2.0.Bug fixes
PT-vs-full-ED tests were loose enough that a reversed bath channel looked like Trotter error.
liouvillian_propagator_itensor, so the contracted channel was time-reversed.prime(env)is now the left (input) bond andenvthe right (output) bond.Densecores had the fused bath input/output combiners swapped relative to the one-mode builder, so non-commuting baths were not trace-preserving. Those links follow the same chronological convention.Tests now compare
Test plan
CI
bench: correctness of builders against discretisation methods
bench: compression using cutoff and timestep
chore: format README latex expressions correctly
fix: restore chronological bath bonds in process-tensor cores
test: silence package logs in the test suite
feat: drop :zipup compressor and make :zipup_cpp the default ACE compression
fix: restore chronological fused-bath links in Dense PTs
bench: add Julia vs C++ ACE construction comparison
bench: use a shared --project=benchmark environment
chore: add links to files in benchmark READMEs
chore: larger fonts in plots